//给定一个非负整数 c ，你要判断是否存在两个整数 a 和 b，使得 a² + b² = c 。 
//
// 
//
// 示例 1： 
//
// 
//输入：c = 5
//输出：true
//解释：1 * 1 + 2 * 2 = 5
// 
//
// 示例 2： 
//
// 
//输入：c = 3
//输出：false
// 
//
// 
//
// 提示： 
//
// 
// 0 <= c <= 2³¹ - 1 
// 
//
// Related Topics 数学 双指针 二分查找 👍 413 👎 0

package leetcode.editor.cn;
//java:平方数之和
public class Q0633SumOfSquareNumbers {
    public static void main(String[] args){
//        Solution solution = new Q0633SumOfSquareNumbers().new Solution();
        System.out.println(new Q0633SumOfSquareNumbers().new Solution().judgeSquareSum(2147483600));
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean judgeSquareSum(int c) {
        if (c < 0) return false;

        int low = 1, high = (int) Math.sqrt(c);
        while (low <= high) {
            int temp = low * low + high * high;
            if (temp == c) {
                return true;
            } else if (temp < c) {
                low++;
            } else {
                high--;
            }
        }
        return false;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}